
$(function () {
    var role_datagrid =  $("#role_datagrid");

    var role_dialog = $("#role_dialog");
    //所有的权限
    var allPermission = $("#allPermission");
    //已有的权限
    var selfPermission = $("#selfPermission");

    role_dialog.dialog({
        width: 550,
        height: 450,
        closed: true,
        resizable: false,
        buttons: [
            {
                text: '保存',
                iconCls: 'icon-save',
                handler: function () {
                    methodObj.save();
                }
            },
            {
                text: '取消',
                iconCls: 'icon-cancel',
                handler: function () {
                    methodObj.cancel();
                }
            }
        ],
        //清空表单数据
        onClose: function () {
            //清空表单信息
            $("#role_form").form('clear');
            //清空权限datagrid的信息
            selfPermission.datagrid('loadData',[]);
            //重新把所有的权限查询出来
            allPermission.datagrid('reload')
        }
    });

    allPermission.datagrid({
        title: '所有的权限',
        width: 250,
        height: 300,
        url:'/permission/list.do',
        fitColumns: true,
        columns: [[
            {field: 'name', title: '权限名称', width: 80}
        ]],
        onDblClickRow: function(index,row){
            //往已有权限中添加点击的数据
            selfPermission.datagrid('appendRow',row);
            //在所有的权限中删除传过去的数据
            allPermission.datagrid('deleteRow',index);
        }
    });

    selfPermission.datagrid({
        title: '已有的权限',
        width: 250,
        height: 300,
        fitColumns: true,
        url: '/permission/selectByRoleId.do',
        columns: [[
            {field: 'name', title: '权限名称', width: 80}
        ]],
        onDblClickRow: function(index,row){
            //在所有的权限中添加点击的数据
            allPermission.datagrid('appendRow',row);
            //往已有权限中删除点击的数据
            selfPermission.datagrid('deleteRow',index);
        },
        onLoadSuccess: function(data){
            //把已有的权限的id 放置在ids数组中
            var ids = $.map(data.rows,function(value){
                return value.id;
            });
            //遍历所有的权限的数据
            var rows = allPermission.datagrid('getRows');
            for(var i = rows.length - 1; i >= 0; i--){
                var permission = rows[i];
                //如果所有的权限的id是存在ids中 意味着角色已经拥有该权限 就需要移除掉
                var index = $.inArray(permission.id,ids);
                if(index >= 0){
                    //根据i 索引来删除行 而不是index
                    allPermission.datagrid('deleteRow',i);
                }
            }
        }
    });

    //树形菜单
    var menu_combotree = $("#menu_combotree");

    //菜单树形下拉框
    menu_combotree.combotree({
        //选择复选框
        onCheck: function(node){
            //获取tree树形对象
            var treeObj = menu_combotree.combotree('tree');
            //获取该节点的父菜单
            var parent = treeObj.tree('getParent',node.target);
            if(parent){
                //设置为勾选状态
                treeObj.tree('check',parent.target);
            }
        }
    });

    //给 a链接统一绑定事件
    $("a[data-cmd]").click(function(){
        var methodName = $(this).data("cmd");
        //调用方法
        methodObj[methodName]();
    });

    role_datagrid.datagrid({
        url: '/role/query.do',
        fit: true,
        fitColumns: true,
        columns: [[
            {field: 'sn', title: '角色编码 ', width: 80},
            {field: 'name', title: '角色名称', width: 80}
        ]],
        toolbar: '#role_toolbar',
        singleSelect: true,
        rownumbers: true,
        pagination: true
    });

    //使用一个对象来统一管理实践的方法
    var methodObj = {
        add: function () {
            //弹出表格窗口
            role_dialog.dialog("open");

            //设置标题
            role_dialog.dialog('setTitle', '新增角色');
        },

        edit: function () {
            //判断是否选中了数据
            var row = role_datagrid.datagrid('getSelected');
            if (!row) {
                //如果没有选中 提示框提示信息
                $.messager.alert("温馨提示", "请选中一条数据", "warning");
                return;
            }

            //选中了一条数据 回显表单数据(根据同名匹配原则 row对象中的属性名要与form中name相同才可以回显)
            $("#role_form").form('load', row);

            //回显权限数据
            selfPermission.datagrid('load',{roleId: row.id});

            //回显菜单的数据
            $.get('/menu/selectByRoleId.do',{roleId: row.id},function(data){

            //回显菜单数据
            menu_combotree.combotree('setValues',data);
            });

            //弹出表格窗口
            role_dialog.dialog("open");

            //设置标题
            role_dialog.dialog('setTitle', '编辑角色');
        },

        //改变角色的状态
        remove: function () {
            var row = role_datagrid.datagrid('getSelected');
            if (!row) {
                //如果没有选中 提示框提示信息
                $.messager.alert("温馨提示", "请选中一条数据", "warning");
                return;
            }
            //弹出确认框 确认改变状态
            $.messager.confirm('确认', '确认要删除该角色?', function (r) {
                if (r) {
                    //发送请求到后台
                    $.get("/role/remove.do", {id: row.id}, function (data) {
                        if (data.success) {
                            $.messager.alert('温馨提示', '删除成功', 'info', function () {
                                //刷新当前页面
                                role_datagrid.datagrid('reload');
                            });
                        } else {
                            $.messager.alert('温馨提示', '删除失败', 'error');
                        }
                    })
                }
            })
        },

        //保存操作
        save: function () {
            //提交表单
            $("#role_form").form('submit', {
                url: '/role/saveOrUpdate.do',
                onSubmit: function(param){
                    //获取已有权限所有的行
                    var rows = selfPermission.datagrid('getRows');
                    for(var i = 0; i < rows.length; i++){
                        //添加权限的参数 封装成数组形式
                        param["permissions["+i+"].id"] = rows[i].id
                    }

                    //获取菜单树形下拉框选中的值
                    var menus = menu_combotree.combotree('getValues');
                    for(var i = 0; i < menus.length; i++){
                        //添加菜单的参数
                        param["menus["+i+"].id"] = menus[i];
                    }


                    //手动调用校验的方法
                    return $("#role_form").form('validate');
                },
                success: function (data) {
                    //转换为json对象
                    data = $.parseJSON(data);
                    if (data.success) {
                        //提示用户操作结果
                        $.messager.alert('温馨提示', '保存成功!', 'info', function () {
                            //关闭弹出框
                            methodObj.cancel();
                            // load 加载和显示第一页的所有行
                            role_datagrid.datagrid('reload')
                        })
                    } else {
                        $.messager.alert('温馨提示', '保存失败!', 'error')
                    }
                }
            })
        },

        //取消操作
        cancel: function () {
            role_dialog.dialog('close');
        },
    }

});

